package edu.erpan.fachada;

import java.util.List;

import com.ibytecode.util.JNDILookup;

import edu.erpan.bl.bean.OrdenPedidoBean;
import edu.erpan.bl.bean.OrdenPedidoBeanRemote;
import edu.erpan.bl.dto.ConsumoMateriaPrima;
import edu.erpan.bl.entities.Cliente;
import edu.erpan.bl.entities.LineaPedido;
import edu.erpan.bl.entities.Pedido;
import edu.erpan.util.entityManager.exceptions.IdNotFoundException;
import edu.erpan.util.entityManager.exceptions.PersistException;
import edu.erpan.util.entityManager.exceptions.QueryException;

public class OrdenPedidoFachada implements IOrdenPedidoFachada{

	@Override
	public Pedido consultarPedido(Pedido pedido) throws QueryException,
			IdNotFoundException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarPedido(pedido);
	}

	@Override
	public List<Pedido> consultarPedidosAProduccion() throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarPedidosAProduccion();
	}
	
	@Override
	public List<Pedido> consultarPedidosPendientes() throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarPedidosPendientes();
	}
	
	@Override
	public List<Pedido> consultarPedidosCancelados() throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarPedidosCancelados();
	}

	@Override
	public Pedido guardarPedido(Pedido pedido, List<LineaPedido> lineasPedido)
			throws PersistException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.guardarPedido(pedido, lineasPedido);
	}

	@Override
	public void editarOrdenPedido(Pedido pedido) throws PersistException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		ordenPedido.editarOrdenPedido(pedido);
	}

	@Override
	public void eliminarPedido(Pedido pedido) throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		ordenPedido.eliminarPedido(pedido);
	}

	@Override
	public List<LineaPedido> consultarLineasPedido(Pedido pedido)
			throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarLineasPedido(pedido);
	}

	public List<ConsumoMateriaPrima> calcularConsumoDeMateriaPrima(Pedido pedido) throws QueryException{
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.calcularConsumoDeMateriaPrima(pedido);
	}
	
	public List<ConsumoMateriaPrima> calcularConsumoDeMateriaPrimaTodosLosPedidosAProduccion() throws QueryException{
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.calcularConsumoDeMateriaPrimaTodosLosPedidos(Pedido.ESTADO_A_PRODUCCION);
	}
	
	public List<ConsumoMateriaPrima> calcularConsumoDeMateriaPrimaTodosLosPedidosPendientes() throws QueryException{
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.calcularConsumoDeMateriaPrimaTodosLosPedidos(Pedido.ESTADO_PENDIENTE);
	}

	@Override
	public List<Cliente> consultarClientes() throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarClientes();
	}
	
	@Override
	public List<Cliente> consultarClientesActivos() throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarClientesActivos();
	}
	
	@Override
	public void cancelarOrdenPeddido(Pedido pedido)
			throws PersistException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		ordenPedido.cancelarOrdenPeddido(pedido);
	}

	@Override
	public void pasarOrdenPedidoAProduccion(Pedido pedido) throws PersistException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		ordenPedido.pasarOrdenPedidoAProduccion(pedido);
	}

	@Override
	public Cliente guardarCliente(Cliente cliente) throws PersistException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.guardarCliente(cliente);
	}

	@Override
	public void editarCliente(Cliente cliente) throws PersistException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		ordenPedido.editarCliente(cliente);
	}

	@Override
	public Cliente consultarClientesPorIdentificacion(Cliente cliente)
			throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarClientesPorIdentificacion(cliente);
	}

	@Override
	public Cliente consultarCliente(Cliente cliente) throws QueryException {
		OrdenPedidoBeanRemote ordenPedido=JNDILookup.doLookup(OrdenPedidoBean.class, OrdenPedidoBeanRemote.class);
		return ordenPedido.consultarCliente(cliente);
	}
}
